package com.bawei.lib_common.aop

import android.content.Context
import android.util.Log
import com.bawei.lib_storage.mmkv.AuthMMKV
import com.tencent.mmkv.MMKV

/**
 * 登录拦截器
 * 提供简单的登录检查功能，替代AOP方案
 */
object LoginInterceptor {
    
    private const val TAG = "LoginInterceptor"
    
    /**
     * 检查MMKV是否已初始化
     */
    private fun isMMKVInitialized(): Boolean {
        return try {
            MMKV.mmkvWithID("test")
            true
        } catch (e: IllegalStateException) {
            Log.e(TAG, "MMKV未初始化: ${e.message}")
            false
        }
    }
    
    /**
     * 检查登录状态并执行操作
     * @param context Context对象
     * @param action 需要执行的操作
     * @param message 未登录时的提示信息
     * @return true表示已登录且执行了操作，false表示未登录
     */
    fun checkLoginAndExecute(
        context: Context, 
        action: () -> Unit, 
        message: String = "请先登录"
    ): Boolean {
        if (!isMMKVInitialized()) {
            Log.e(TAG, "MMKV未初始化，无法检查登录状态")
            return false
        }
        
        if (AuthMMKV.hasLogin()) {
            Log.d(TAG, "用户已登录，执行操作")
            action.invoke()
            return true
        } else {
            Log.d(TAG, "用户未登录: $message")
            LoginManager.navigateToLogin(context)
            return false
        }
    }
    
    /**
     * 检查登录状态并执行操作（Fragment版本）
     * @param fragment Fragment对象
     * @param action 需要执行的操作
     * @param message 未登录时的提示信息
     * @return true表示已登录且执行了操作，false表示未登录
     */
    fun checkLoginAndExecute(
        fragment: androidx.fragment.app.Fragment,
        action: () -> Unit,
        message: String = "请先登录"
    ): Boolean {
        val context = fragment.activity ?: fragment.context
        return if (context != null) {
            checkLoginAndExecute(context, action, message)
        } else {
            Log.w(TAG, "无法获取Context，无法执行操作")
            false
        }
    }
    
    /**
     * 检查是否已登录
     */
    fun isLoggedIn(): Boolean {
        if (!isMMKVInitialized()) {
            Log.e(TAG, "MMKV未初始化，无法检查登录状态")
            return false
        }
        return AuthMMKV.hasLogin()
    }
    
    /**
     * 跳转到登录页面
     */
    fun navigateToLogin(context: Context): Boolean {
        return LoginManager.navigateToLogin(context)
    }
} 